/**Jakub Pilch
 * Informatyka IEiT
 * grupa 4, rok I.
 */
package calculate;

import java.awt.*;
import java.awt.event.*;
import javax.swing.JButton;
import javax.swing.JPanel;
import java.text.DecimalFormat;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

/**Klasa SciNumbers okresla JPanel zawierajacy przyciski z numerami
 * kalkulatora wraz z obsluga zdarzen (dla kalkulatora naukowego).
 */

class SNumbers extends JPanel{
    
    JButton n0,n1,n2,n3,n4,n5,n6,n7,n8,n9,ndot,nc;  //przyciski.
    static boolean doted = false;                   //po przecinku.
    static float counter = 0.1f;
    static int licznik = 0;                         //ograniczenie wielkosci.
    static boolean eqwait = false;                  //wstawiono znak dzialania.
    DecimalFormat df = new DecimalFormat("#0.00000");//do formatowania double.
    
    
    private ActionListener akcja2 = new ActionListener(){
        public void actionPerformed(ActionEvent a){
            if (licznik>10){                        //przekroczenie zakresu.
                JOptionPane.showMessageDialog(new JFrame(),
                          "Zbyt duza liczba - zagrozenie przepelnieniem.",
                          "Zagrozenie przepelnieniem", JOptionPane.ERROR_MESSAGE);
                Sreset();
                Calculate.l2.setText(df.format(Calculate.snbr1));
            }
            
            else{
                String txt = ((JButton)a.getSource()).getText();
                if (!doted){                        //nie po przecinku.
                    if (!eqwait){
                        Calculate.snbr1 = 10 * Calculate.snbr1 + Integer.parseInt(txt);
                        Calculate.l2.setText(df.format(Calculate.snbr1));
                    }
                    else{
                        Calculate.snbr2 = 10 * Calculate.snbr2 + Integer.parseInt(txt);
                        Calculate.l2.setText(df.format(Calculate.snbr2));
                    }
                    licznik++;  
                }
                
                else{                               //po przecinku.
                    if (!eqwait){
                        Calculate.snbr1 += Double.parseDouble(txt) * counter;
                        Calculate.l2.setText(df.format(Calculate.snbr1));
                    }
                    else{
                        Calculate.snbr2 += Double.parseDouble(txt) * counter;
                        Calculate.l2.setText(df.format(Calculate.snbr2));
                    }
                    counter *= 0.1;
                }
            }
        }
    };
    
    private ActionListener akcjadot = new ActionListener(){
        public void actionPerformed(ActionEvent a){
            doted = true;                           //od teraz po przecinku.
        }
    };
    
    private ActionListener akcjac = new ActionListener(){
        public void actionPerformed(ActionEvent a){
            Sreset();
        }
    };
    
    protected SNumbers(){
        setLayout(new GridLayout(4,3));             //siatka przyciskow.
        setSize(100, 100);
        
        n0 = new JButton("0");                      //inicjalizacja.
        n1 = new JButton("1");
        n2 = new JButton("2");
        n3 = new JButton("3");
        n4 = new JButton("4");
        n5 = new JButton("5");
        n6 = new JButton("6");
        n7 = new JButton("7");
        n8 = new JButton("8");
        n9 = new JButton("9");
        ndot = new JButton(".");
        nc = new JButton("C");
        
        n0.addActionListener(akcja2);               //przypisanie obslugi.
        n1.addActionListener(akcja2);
        n2.addActionListener(akcja2);
        n3.addActionListener(akcja2);
        n4.addActionListener(akcja2);
        n5.addActionListener(akcja2);
        n6.addActionListener(akcja2);
        n7.addActionListener(akcja2);
        n8.addActionListener(akcja2);
        n9.addActionListener(akcja2);
        ndot.addActionListener(akcjadot);
        nc.addActionListener(akcjac);
        
        add(n7);                                    //dodanie do
        add(n8);                                    //layoutu.
        add(n9);
        add(n4);
        add(n5);
        add(n6);
        add(n1);
        add(n2);
        add(n3);
        add(n0);
        add(ndot);
        add(nc);
    }
    
    protected void Sreset(){
        Calculate.snbr1 = 0;                     //reset danych.
        Calculate.snbr2 = 0;
        Calculate.sresult = 0;
        Calculate.ssig = '0';
        counter = 0.1f;
        doted = false;
        eqwait = false;
        licznik = 0;
        SciExecutors.firstuse = true;
        Calculate.l2.setText(df.format(Calculate.snbr1));
    }
    
}
